5. 数据结构-字典

Map 这种数据结构用 js 来实现,其实它和集合(Set)极为类似,只不过 Map 是【键,值】的形式存储元素,通过键来查询值,Map 用于保存具有映射关系的数据,Map 里保存着两组数据:key 和 value,它们都可以是任何引用类型的数据,但 key 不能重复,而集合以【值,值】的形式存储元素。字典也可以叫做映射。在ES6 中同样新增了 Map这种数据结构。要实现的 Map 跟前面所实现的 Set 是十分相似的。只不过在对应的映射关系时会有些修改。

function Map() {
  var items = {};

  this.has = function (key) {
    return key in items;
  };

  this.set = function (key, value) {
    items[key] = value;
  };

  this.delete = function (key) {
    if (this.has(key)) {
      delete items[key];
      return true;
    }

    return false;
  };

  this.get = function (key) {
    return this.has(key) ? items[key] : undefined;
  };

  this.values = function () {
    var values = [];
    for (var k in items) {
      if (this.has(k)) {
        values.push(items[k]);
      }
    }
    return values;
  };

  this.keys = function () {
    return Object.keys(items);
  };

  this.getItems = function () {
    return items;
  };

  this.clear = function () {
    items = {};
  };

  this.size = function () {
    return Object.keys(items).length;
  };
}

var map = new Map();

map.set("zak", "fat");
map.set("lily", "thin");
map.set("david", "big");
map.set("jams", "small");

console.log(map.has("jams")); //true
console.log(map.has("zaking")); //false

console.log(map.size()); //4
console.log(map.keys()); //["zak", "lily", "david", "jams"]
console.log(map.values()); //["fat", "thin", "big", "small"]
console.log(map.get("zak")); //fat

map.delete("zak");
console.log(map.has("zak")); //false
console.log(map.getItems()); //{lily: "thin", david: "big", jams: "small"}